// 全局错误管理器
package exception

import "errors"

type ExceptionManager struct {
	debug        bool
	colorEnabled bool // 是否启用颜色输出
}

func NewExceptionManager(debug bool) *ExceptionManager {
	return &ExceptionManager{debug: debug, colorEnabled: true}
}

func (em *ExceptionManager) Handle(err error) error {
	if err == nil {
		return nil
	}
	/**
	 *转换错误类型
	 * 尝试将 err 转换为自定义类型 *excErr
	 */
	var excErr *ExceptionError
	if !errors.As(err, &excErr) {
		//转换失败才会走这里
		excErr = WarnError("意外错误 unexpected error", ErrUnknownCode, LevelWarning)
	}

	// 显示错误
	em.displayError(excErr)

	// 根据级别处理
	switch excErr.Level {
	case LevelFatal:
		// 致命错误，终止程序
		return excErr // 直接返回错误
	default:
		return excErr // 其他错误终止
	}
}
